"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 24、内置库：JSON.py
"""

""""
json是一种存储和交换数据的语法。是一种轻量级的数据交换格式
json一般键值是双引号 ""
使用场景：
    1、 接口数据传输  
    2、 序列化  
    3、 配置文件


{
    "data": [
    {   
      "id":12212141424,
      "code":200
      "message":"成功"
    }
    ]
}
"""

"""
常用方法 ：
    1、dumps() : 将 python 对象编码成 json 字符串
    2、loads() : 解析 Json 数据，该函数返回 python 对象
    3、dump() : python 对象编码，并将数据写入json文件中
    4、load() : 从 json 文件中读取数据并解码为 python 对象
"""

import json

# 定义 python 结构 data 字典

data = {
    'a': 1,
    'b': ['2', '3'],
    'c': True,
    'd': False,
    'e': None,
    'f': '双杰'
}

# dumps() 将python对象转化成json字符串   str类型
# 有中文时，设置ensure_ascii = False   indent ：根据数据格式缩进显示，默认为None. 美化格式
json_data = json.dumps(data, ensure_ascii=False, indent=4)
# 返回结果是：
"""
双引号
false
null
true
{
    "a": 1,
    "b": [
        "2",
        "3"
    ],
    "c": true,
    "d": false,
    "e": null,
    "f": "双杰"
}

"""
print(json_data)
# str  json格式
print(type(json_data))

# loads()  将 json 转化成 python 对象
# 返回的结果是：{'a': 1, 'b': ['2', '3'], 'c': True, 'd': False, 'e': None}
python_data = json.loads(json_data)
print(python_data)
#   字典类型：dict
print(type(python_data))

# 带 s 和 字符串 有关。
# 不带 s 的和 文件 有关

# dump()  python编码对象转化为json数据,并将数据写入json文件中
# 当前文件新建data.json文件   内容为：{"a": 1, "b": ["2", "3"], "c": true, "d": false, "e": null}
with open('data.json', 'w', encoding='utf-8') as f:
    # data 是 python 格式
    json.dump(data, f, ensure_ascii=False)

# load()  将json文件读取并解码为python对象
# 将目录下的data.json文件内容读取出来，并转化成python字典  结果是：{'a': 1, 'b': ['2', '3'], 'c': True, 'd': False, 'e': None}
with open('data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
    print(data)
